package com.xrh.xdemo.service.service;


import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xrh.core.bean.CommonPage;
import com.xrh.core.bean.CommonResult;
import com.xrh.core.exceptions.BusinessException;
import com.xrh.core.utils.XAssert;
import com.xrh.xdemo.api.dto.entity.WordTemplateDTO;
import com.xrh.xdemo.service.aspects.OperateTraceAspect;
import com.xrh.xdemo.service.entity.WordTemplateEntity;
import com.xrh.xdemo.api.request.addRequest.WordTemplateAddRequest;
import com.xrh.xdemo.api.request.queryRequest.WordTemplateQueryRequest;
import com.xrh.xdemo.api.request.updateRequest.WordTemplateSaveRequest;
import com.xrh.xdemo.service.mapper.WordTemplateMapper;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.http.HtmlUtil;

@Service
public class WordTemplateService {

	@Resource
	WordTemplateMapper wordTemplateMapper;
	
	/**
	 * @function 新增WordTemplate
	 * @param wordTemplateAddRequest
	 * @author 肖荣辉
	 * @date 2023-12-22 16:10:27
	*/
	public Long addWordTemplate(WordTemplateAddRequest wordTemplateAddRequest) {
		
		WordTemplateEntity wordTemplateEntity = new WordTemplateEntity();
		
		BeanUtil.copyProperties(wordTemplateAddRequest , wordTemplateEntity , CopyOptions.create().ignoreNullValue());
		
		wordTemplateMapper.insert(wordTemplateEntity);
		
		return wordTemplateEntity.getId();
	}

	/**
	 * @function 删除WordTemplate
	 * @param id
	 * @author 肖荣辉
	 * @date 2023-12-22 16:10:27
	*/
	public void deleteWordTemplateById(Long id) {
		
		if(id == null)
			throw new BusinessException("id不能为空");
			
		WordTemplateEntity wordTemplateEntity = wordTemplateMapper.selectById(id);
		
		if(wordTemplateEntity == null)
			throw new BusinessException("id不合法");
		
		UpdateWrapper<WordTemplateEntity> updateWrapper = new UpdateWrapper<>();
		updateWrapper.eq("id", id);
		
		//因为注解了@TableLogic , 自动会把删除标志位设置为1 
		wordTemplateMapper.delete(updateWrapper);
		
		//操作轨迹标题
		OperateTraceAspect.setTitle(wordTemplateEntity.getTemplateName());
	}

	/**
	 * @function 保存模板
	 * @param saveRequest
	 * @author 肖荣辉
	 * @date 2023-12-22 16:10:27
	*/
	public Long saveWordTemplate(WordTemplateSaveRequest saveRequest) {
		
		//XSS过滤器经过转义 , 这里转义
		saveRequest.setContent(HtmlUtil.unescape(saveRequest.getContent()));

		//新增
		if(saveRequest.getId()  == null) {
			
			WordTemplateEntity wordTemplateEntity =  new WordTemplateEntity();
			
			BeanUtil.copyProperties(saveRequest, wordTemplateEntity);
			
			wordTemplateMapper.insert(wordTemplateEntity);
			
			return wordTemplateEntity.getId();
		}
		
		WordTemplateEntity wordTemplateEntity = wordTemplateMapper.selectById(saveRequest.getId());
		
		XAssert.isTrue(wordTemplateEntity != null, "模板id不合法");
		
		BeanUtil.copyProperties(saveRequest , wordTemplateEntity);
		
		wordTemplateMapper.updateById(wordTemplateEntity);
		
		return wordTemplateEntity.getId();
	}

	/**
	 * @function 根据ID查询WordTemplate Entity
	 * @param id
	 * @author 肖荣辉
	 * @date 2023-12-22 16:10:27
	*/
	public WordTemplateEntity findWordTemplateEntityById(Long id) {
		
		if(id == null)
			throw new BusinessException("id不能为空");
			
		WordTemplateEntity wordTemplateEntity = wordTemplateMapper.selectById(id);
		
		return wordTemplateEntity;
	}
	
	/**
	 * @function 根据ID查询WordTemplate DTO
	 * @param id
	 * @author 肖荣辉
	 * @date 2023-12-22 16:10:27
	*/
	public WordTemplateDTO findWordTemplateById(Long id) {
		
		if(id == null)
			throw new BusinessException("id不能为空");
	
		WordTemplateEntity wordTemplateEntity = wordTemplateMapper.selectById(id);
		
		WordTemplateDTO  wordTemplateDTO = BeanUtil.toBean(wordTemplateEntity , WordTemplateDTO.class);
		
		return wordTemplateDTO;
	}

	/**
	 * @function 根据WordTemplateQueryVo查询WordTemplate列表
	 * @param wordTemplateQueryRequest
	 * @author 肖荣辉
	 * @date 2023-12-22 16:10:27
	*/
	public CommonResult<CommonPage<WordTemplateDTO>> findWordTemplateList(WordTemplateQueryRequest wordTemplateQueryRequest) {
		
		Page<WordTemplateEntity> page = wordTemplateQueryRequest.createPage();

		QueryWrapper<WordTemplateEntity> queryWrapper = wordTemplateQueryRequest.createQuery();
		
		wordTemplateMapper.selectPage(page, queryWrapper);
		
		List<WordTemplateDTO> dtoList = BeanUtil.copyToList(page.getRecords() , WordTemplateDTO.class);
		
		return CommonResult.success(CommonPage.create(wordTemplateQueryRequest.getPageNum() , wordTemplateQueryRequest.getPageSize() , dtoList, page.getTotal()));
	}
	
	
	
}
